// import uniRequest from "@/libs/request.ts";
import { RequestOptions, UniRequest } from "@/libs/request.ts";
import useRouter from "./useRouter";
import { useUserStore } from "@/store";
import useWdToast from "./useWdToast";
const router = useRouter();
const wdToast = useWdToast();
export default function useRequest() {
	const RESERRORCODE : any = {
		1001: {
			msg: "请登录客户端",
			errFun: (data : any) => {
				const userStore = useUserStore();
				// 执行跳转登录操作
				// #ifndef MP-WEIXIN
				router.push("/commonPage/login/login")
				// #endif
				// #ifdef MP-WEIXIN
				userStore.wxLogin();
				// #endif
			}
		},
		1002: {
			msg: "用户不存在", errFun: (data : any) => {
				const userStore = useUserStore();
				// 执行跳转登录操作
				// #ifndef MP-WEIXIN
				router.push("/commonPage/login/login")
				// #endif
				// #ifdef MP-WEIXIN
				userStore.wxLogin();
				// #endif
			}
		},
		1003: {
			msg: "用户token已过期，请重新登录", errFun: (data : any) => {
				const userStore = useUserStore();
				// 执行跳转登录操作
				// #ifndef MP-WEIXIN
				router.push("/commonPage/login/login")
				// #endif
				// #ifdef MP-WEIXIN
				userStore.wxLogin();
				// #endif
			}
		},
		1004: {
			msg: "token错误", errFun: (data : any) => {
				const userStore = useUserStore();
				// 执行跳转登录操作
				// #ifndef MP-WEIXIN
				router.push("/commonPage/login/login")
				// #endif
				// #ifdef MP-WEIXIN
				userStore.wxLogin();
				// #endif
			}
		},
		1005: {
			msg: "另一客户端登陆", errFun: (data : any) => {
				const userStore = useUserStore();
				// 执行跳转登录操作
				// #ifndef MP-WEIXIN
				router.push("/commonPage/login/login")
				// #endif
				// #ifdef MP-WEIXIN
				userStore.wxLogin();
				// #endif

			}
		},
		1006: {
			msg: "错误信息", errFun: (data : any) => {
				const userStore = useUserStore();
				// 执行跳转登录操作
				// #ifndef MP-WEIXIN
				router.push("/commonPage/login/login")
				// #endif
				// #ifdef MP-WEIXIN
				userStore.wxLogin();
				// #endif

			}
		},
		2001: {
			msg: "输入错误或参数错误",
		},
		2002: { msg: "接口出错" },
	}
	const config : RequestOptions = {
		baseURL: "https://lvshi.haidanet.com/",

		// baseURL: "lvshiHaidanet/"
	};
	const uniRequest = new UniRequest(config)

	uniRequest.interceptors.request = (config : RequestOptions) : RequestOptions => {
		const userStore = useUserStore();
		if (config.custom && config.custom.auth) {
			config['header'] = {
				...config['header'],
				userid: userStore.userId,
				token: userStore.token, // 这里应该从 userStore 里面获取 token，然后设置到 header 里面。
			}
		}

		// userStore
		// 处理 header token 等等操作
		return config; // 返回配置对象，可以在这里进行一些请求拦截操作，比如添加token等。
	}


	uniRequest.interceptors.response = (data : any) : any => {
		// 处理数据返回
		if (RESERRORCODE[data.code]) {
			let fun = RESERRORCODE[data.code].errFun;
			if (fun) {
				fun(data);
			} else {
				uni.$wdToast.error(data.msg ?? RESERRORCODE[data.code].msg)
			}

			// uni.showToast({ icon: "none", title: data.msg ?? RESERRORCODE[data.code].msg });
			// RESERRORCODE[data.code].errFun(data); // 调用错误处理函数，处理错误信息。

			return Promise.reject(data); // 返回配置对象，可以在这里进行一些请求拦截操作，比如添加token等。
		} else {
			return data.data; // 返回配置对象，可以在这里进行一些请求拦截操作，比如添加token等。
		}

	}
	uniRequest.interceptors.fail = (err : any) : any => {
		// 处理数据返回
		// uni.showToast({
		// 	icon: "none",
		// 	title: err.msg || err.errMsg,
		// });
		uni.$wdToast.error(err.msg || err.errMsg)
		return err;
	}

	const request = (e : any) => {
		return uniRequest.request(e);
	};
	const get = (e : any) => {
		return uniRequest.request({
			...e, method: "GET"
		});
	}

	const post = (e : any) => {
		return uniRequest.request({
			...e, method: "POST"
		});
	}

	const put = (e : any) => {
		return uniRequest.request({
			...e, method: "PUT"
		});
	}
	const del = (e : any) => {
		return uniRequest.request({
			...e, method: "DELETE"
		});
	}
	const upload = (file : any, uploadURL = 'currency/common/uploadimg') => {
		const userStore = useUserStore();
		return new Promise((resolve, reject) => {
			uni.uploadFile({
				url: config.baseURL + '/' + uploadURL, //仅为示例，非真实的接口地址
				filePath: file,
				header: {
					userid: userStore.userId,
					token: userStore.token, // 这里应该从 userStore 里面获取 token，然后设置到 header 里面。
				},
				name: 'file',
				success: (uploadFileRes : any) => {
					let resData = JSON.parse(uploadFileRes.data);
					if (uploadFileRes.statusCode === 200 && resData.code == 1) {
						resolve(resData);
					} else {
						reject(uploadFileRes);
						wdToast.error(uploadFileRes)
					}

				},
				fail: (err : any) => {
					reject(err);
					wdToast.error(err)
				},
			});
		})

	}

	return {
		request,
		get,
		post,
		put,
		del,
		upload,
	};
}